import njust.csc.aecore.utils.SerializeUtils
import org.junit.jupiter.api.Test


/**
 * @Author ZhouHang
 * @Date 24/7/4 周四
 */
class JsonTest {
    @Test fun `Test Map to Json`() {
        val hashMap = hashMapOf(
            "key1" to "value1",
            "key2" to hashMapOf("key3" to listOf("123", "456"))
        )
//        val jsonString = SerializeUtils.toJson(hashMap)
//        println(jsonString)
    }

    @Test fun `Test Json to Map`() {
        var resultMap: Map<Any?, Any?> = HashMap()
        val jsonString1 = "{\"model\":\"gpt-4-turbo-preview\",\"messages\":[{\"role\":\"user\",\"content\":\"我将会为你提供一个app的部分信息，请您为我判断这个app是否存在涉嫌赌博、色情、诈骗的可能。\\n注意：你的返回是\\\"yes\\\"或者\\\"no\\\"，随后换行用不超过三句话解释理由\\n注意：\\n1、对于 app_name, 你需要关注其中是否含涉黄、赌、诈的关键词，若含有例如“棋牌，色，娱乐，财”这一类的关键词，则具有涉嫌赌博、色情、诈骗的可能。\\n2、对于 app_package, 你需要关注其中是否包含乱码或随机字符，若含有乱码或随机字符，则具有涉嫌赌博、色情、诈骗的可能。\\n3、对于 content, 你需要关注其中是否含有例如“棋牌，色，娱乐，财”这一类的关键词，则具有涉嫌赌博、色情、诈骗的可能。\\n4、对于 signature, 签名上，可能使用无效或自签名，签名名称是乱码，或者盗用已知的被撤销的签名，缺乏信誉度和安全性验证。\\n5、对于 permission, 涉诈应用可能会要求过于多的危险的权限，尤其是敏感权限\\n{app_name}: 在线娱乐\\n{app_package}: com.pro.stocktradeandroid.zxyl\\n{content}: 3:36四全上自9信守4和  3:36四全国六军4自  3:37四会国9信守4和  3:37四会国9信守4和  3:37个国   3:37四会国9信守4和  3:37四会国9信守4和  3:37四会国9信守4和  \\n{signature}: SignatureInfoV1(name=CERT.RSA, signatureFileName=META-INF/CERT.SF, certification=Certification(subject=CN=CN,OU=CN,O=CN,L=CN,ST=CN,C=CN, signatureType=SHA256withRSA, md5=B6 B8 DB 46 82 42 3B E9 71 E3 B4 6A 6A B1 53 58 , sha1=5F 44 D5 09 3C 6D A9 C7 43 00 97 67 6B 9E F6 5D 04 09 84 B5 , sha256=9A 1E 1A 62 E5 2E 0C BE 50 02 CA D9 33 6F 5A 4C 2F C6 FE 1E CA 20 4F DF C9 85 CE 6D 3F 65 C5 A2 ))\\n{permission}: [android.permission.INTERNET]\\n\\n{output}:\"}]}\n"
        val jsonString2 = "{\"id\":\"chatcmpl-9hU6UGJD5IQdUEvtrUcYRfOofjwYO\",\"object\":\"chat.completion\",\"created\":1720150850,\"model\":\"gpt-4-turbo-preview\",\"choices\":[{\"index\":0,\"message\":{\"role\":\"assistant\",\"content\":\"yes\\nApp名称含有“娱乐”字样，内容中虽然无明显违规词汇，但结合“在线娱乐”可能隐含赌博、色情等违规内容。签名信息仅显示基础信息，但仅此无法断定其涉赌、色或诈骗，需结合实际内容与权限等深入分析。权限要求并不过多，但依旧需警惕潜在风险。\"},\"logprobs\":null,\"finish_reason\":\"stop\"}],\"usage\":{\"prompt_tokens\":760,\"completion_tokens\":137,\"total_tokens\":897},\"system_fingerprint\":null,\"code\":0,\"msg\":\"ok\"}\n"
        resultMap = SerializeUtils.toMap(jsonString2)
        val choices = resultMap["choices"] as List<*>
        val tmp = choices[0] as Map<*, *>
        val message = tmp["message"] as Map<*, *>
        println(message["content"])
    }
}
